<?php
namespace Zxf5115\Laravel\Kernel\Utils;

/**
 * @author zhangxiaofei [<1326336909@qq.com>]
 * @dateTime 2025-09-16
 *
 * 请求数据格式化工具类
 *
 * 提供请求参数处理、关联数据组装等数据格式化功能
 */
class RequestUtil
{
  /**
   * 组装关联对象数据
   *
   * 将请求中的关联字段数据按索引重组，便于批量处理关联关系
   *
   * @param array $params 用户请求参数数组
   * @param array $fields 需要处理的关联字段列表
   * @return array 重组后的关联数据数组
   */
  public static function packRelevanceData(array $params, array $fields) : array
  {
    $response = [];

    foreach($fields as $field)
    {
      // 跳过不存在或空值的字段
      if(!self::hasValidValue($params, $field))
      {
        continue;
      }

      // 处理数组类型的关联数据
      if(is_array($params[$field]))
      {
        foreach($params[$field] as $key => $item)
        {
          // 确保子数组存在
          if(!isset($response[$key]))
          {
            $response[$key] = [];
          }

          $response[$key][$field] = $item;
        }
      }
      else
      {
        // 处理单个值的关联数据
        $response[$field] = $params[$field];
      }
    }

    return $response;
  }


  /**
   * 检查字段是否存在且具有有效值
   *
   * @param array $params 参数数组
   * @param string $field 字段名
   * @return bool 字段是否有效
   */
  private static function hasValidValue(array $params, string $field) : bool
  {
    if(!array_key_exists($field, $params))
    {
      return false;
    }

    // 空数组或空字符串视为无效值
    return !empty($params[$field]) || (is_array($params[$field]) && !empty($params[$field]));
  }
}
